`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2022/03/16 15:09:41
// Design Name: 
// Module Name: ImmUnit
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////
import Params::*;
`include "Parameters.v"

module ImmUnit(
input Type ImmType,
input logic [31:0] In,
output logic [31:0] Out
    );
always_comb
begin
    case(ImmType)
        RTYPE:Out=32'd0;
        ITYPE:Out={{20{In[31]}},In[31:20]};                                            //有符号扩展
        UTYPE:Out={In[31:12],12'd0};                                                   //低12位添0
        BTYPE:Out={{19{In[31]}},In[31],In[7],In[30:25],In[11:8],1'b0};                 //左移1位，符号扩展
        JTYPE:Out={{11{In[31]}},In[31],In[19:12],In[20],In[30:21],1'b0};               //左移1位，符号扩展
        STYPE:Out={{20{In[31]}},In[31:25],In[11:7]};                                   //符号扩展      
        default:Out=32'd0;
    endcase
end
endmodule
